home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 April / PCWorld_2000-04_cd.bin / Hardware / Drivers / MSIP / Microsoft Mouse - PC Drivers_soubory / toolbar.js < prev   
Text File  |  2000-03-01  |  20KB  |  670 lines

  1. // VSS Version 67 - Release October 25, 1999
  2. //
  3. var ToolBar_Supported = false;
  4. var Frame_Supported   = false;
  5. var DoInstrumentation = false;
  6.  
  7. if (navigator.userAgent.indexOf("MSIE")    != -1 && 
  8.     navigator.userAgent.indexOf("Windows") != -1 && 
  9.     navigator.appVersion.substring(0,1) > 3)
  10. {
  11.     ToolBar_Supported = true;
  12. }
  13.  
  14. if (ToolBar_Supported)
  15. {
  16.     var newLineChar = String.fromCharCode(10);
  17.     var char34 = String.fromCharCode(34);
  18.     var LastMSMenu = "";
  19.     var LastICPMenu= "";
  20.     var CurICPMenu = "";
  21.     var IsMSMenu = false;
  22.     var IsMenuDropDown = true;
  23.     var HTMLStr;
  24.     var TBLStr;
  25.     var x = 0;
  26.     var y = 0;
  27.     var x2 = 0;
  28.     var y2 = 0;
  29.     var x3 = 0;
  30.     var MSMenuWidth;
  31.     var ToolbarMinWidth;
  32.     var ToolbarMenu;
  33.     var ToolbarBGColor;
  34.     var ToolbarLoaded = false;
  35.     var aDefMSColor  = new Array(3);
  36.     var aDefICPColor = new Array(3);
  37.     var aCurMSColor  = new Array(3);
  38.     var aCurICPColor = new Array(3);
  39.     var MSFont;
  40.     var ICPFont;
  41.     var MaxMenu = 30;
  42.     var TotalMenu = 0;
  43.     var arrMenuInfo = new Array(30);
  44.  
  45.     // Output style sheet and toolbar ID
  46.     document.write("<SPAN ID='StartMenu' STYLE='display:none;'></SPAN>");
  47.  
  48.     // Build toolbar template
  49.     TBLStr  = "<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR STYLE='height:20;vertical-align:middle'><!--ICP_MENU_TITLES--></TR></TABLE>";
  50.     HTMLStr = 
  51.         "<DIV ID='idToolbar'     STYLE='background-color:white;width:100%'>" +
  52.         "<DIV ID='idRow1'        STYLE='position:relative;height:20;'>" +
  53.         "<DIV ID='idICPBanner'   STYLE='position:absolute;top:0;left:0;height:60;width:250;overflow:hidden;vertical-align:top;'><!--BEG_ICP_BANNER--><!--END_ICP_BANNER--></DIV>" +
  54.         "<DIV ID='idMSMenuCurve' STYLE='position:absolute;top:0;left:250;height:20;width:18;overflow:hidden;vertical-align:top;'><IMG SRC='/library/toolbar/images/curve.gif' BORDER=0></DIV>" +
  55.         "<DIV ID='idMSMenuPane'  STYLE='position:absolute;top:0;left:250;height:20;width:10;color:white;background-color:black;float:right;' NOWRAP><!--MS_MENU_TITLES--></DIV>" + 
  56.         "</DIV>" +
  57.         "<DIV ID='idRow2' STYLE='position:relative;left:250;height:40;'>" +
  58.         "<DIV ID='idADSBanner'   STYLE='position:absolute;top:0;left:0;height:40;width:200;vertical-align:top;overflow:hidden;'><!--BEG_ADS_BANNER--><!--END_ADS_BANNER--></DIV>" +
  59.         "<DIV ID='idMSCBanner'   STYLE='position:absolute;top:0;left:200;height:40;width:112;vertical-align:top;overflow:hidden;' ALIGN=RIGHT><!--BEG_MSC_BANNER--><!--END_MSC_BANNER--></DIV>" +
  60.         "</DIV>" +
  61.         "<DIV ID='idRow3' STYLE='position:relative;height:20;width:100%'>" +
  62.         "<DIV ID='idICPMenuPane' STYLE='position:absolute;top:0;left:0;height:20;color:white;background-color:black;' NOWRAP><!--ICP_MENU_TITLES--></DIV>" +
  63.         "</DIV>" +
  64.         "</DIV>" +
  65.         "<SCRIPT FOR=idToolbar EVENT=onresize>resizeToolbar();</SCRIPT>" +
  66.         "<SCRIPT FOR=idToolbar EVENT=onmouseover>hideMenu();</SCRIPT>" +
  67.         "<SCRIPT TYPE='text/javascript'>" + 
  68.         "   var ToolbarMenu = StartMenu;" + 
  69.         "</SCRIPT>" + 
  70.         "<DIV WIDTH=100%>";
  71.  
  72.     // Intialize global variables
  73.     ToolbarBGColor    = "white";                        // toolbar background color
  74.     MSFont  = "xx-small Verdana";
  75.     ICPFont = "bold xx-small Verdana";
  76.     
  77.     aDefMSColor[0]    = aCurMSColor[0]  = "black";    // bgcolor;
  78.     aDefMSColor[1]    = aCurMSColor[1]  = "white";    // text font color
  79.     aDefMSColor[2]  = aCurMSColor[2]  = "red";        // mouseover font color
  80.     
  81.     aDefICPColor[0]    = aCurICPColor[0] = "#6699CC";    // bgcolor;
  82.     aDefICPColor[1] = aCurICPColor[1] = "white";    // text font color
  83.     aDefICPColor[2] = aCurICPColor[2] = "red";        // mouseover font color
  84. }
  85.  
  86. // The hard-coded numbers in functions - drawToolbar() & resizeToolbar()
  87. // correspond to the dimension of the four gif files:
  88. //        ICP_BANNER: 60h x 250w
  89. //        ADS_BANNER: 40h x 200w
  90. //        MSC_BANNER: 40h x 112w
  91. //        Curve:        20h x 18w
  92.  
  93. function drawToolbar()
  94. {
  95.     HTMLStr += "</DIV>";
  96.     document.write(HTMLStr);
  97.     ToolbarLoaded = true;
  98.     MSMenuWidth     = Math.max(idMSMenuPane.offsetWidth, (200+112));
  99.     ToolbarMinWidth = (250+18) + MSMenuWidth;
  100.  
  101.     idToolbar.style.backgroundColor     = ToolbarBGColor;
  102.     idMSMenuPane.style.backgroundColor  = aDefMSColor[0];
  103.     idICPMenuPane.style.backgroundColor = aDefICPColor[0];
  104.     idMSMenuPane.style.color            = aDefMSColor[1];
  105.     idICPMenuPane.style.color            = aDefICPColor[1];
  106.     resizeToolbar();
  107.  
  108.     for (i = 0; i < TotalMenu; i++) 
  109.     {
  110.         thisMenu = document.all(arrMenuInfo[i].IDStr);
  111.         if (thisMenu != null)
  112.         {
  113.             if (arrMenuInfo[i].IDStr == LastMSMenu && arrMenuInfo[i].type == "R")
  114.             {
  115.                 //Last MSMenu has to be absolute width
  116.                 arrMenuInfo[i].type = "A";
  117.                 arrMenuInfo[i].unit = 200;
  118.             }
  119.             if (arrMenuInfo[i].type == "A")
  120.                 thisMenu.style.width = arrMenuInfo[i].unit;
  121.             else 
  122.                 thisMenu.style.width = Math.round(arrMenuInfo[i].width * arrMenuInfo[i].unit) + 'em';
  123.         }
  124.     }
  125. }
  126.  
  127. function resizeToolbar()
  128. {
  129.     if (ToolBar_Supported == false) return;
  130.  
  131.     w = Math.max(ToolbarMinWidth, document.body.clientWidth) - ToolbarMinWidth;
  132.     
  133.     idMSMenuCurve.style.left  = (250+w);
  134.     idMSMenuPane.style.left   = (250+w+18);
  135.     idMSMenuPane.style.width  = MSMenuWidth;
  136.  
  137.     idADSBanner.style.left    = (w+18);
  138.  
  139.     idMSCBanner.style.left    = (w+18+200);
  140.     idMSCBanner.style.width   = (MSMenuWidth - 200);
  141.     
  142.     idICPMenuPane.style.width = ToolbarMinWidth + w;
  143. }
  144.  
  145. function setToolbarBGColor(color)
  146. {    
  147.     ToolbarBGColor = color;
  148.     if (ToolbarLoaded == true)
  149.         idToolbar.style.backgroundColor = ToolbarBGColor;
  150. }    
  151.  
  152. function setMSMenuFont(sFont)
  153. {    MSFont = sFont;
  154. }
  155.  
  156. function setICPMenuFont(sFont)
  157. {    ICPFont = sFont;
  158. }
  159.  
  160. function setDefaultMSMenuColor(bgColor, fontColor, mouseoverColor)
  161. {    
  162.     if (bgColor   != "")      aDefMSColor[0] = bgColor;
  163.     if (fontColor != "")      aDefMSColor[1] = fontColor;
  164.     if (mouseoverColor != "") aDefMSColor[2] = mouseoverColor;
  165. }
  166.  
  167. function setDefaultICPMenuColor(bgColor, fontColor, mouseoverColor)
  168. {    
  169.     if (bgColor   != "")      aDefICPColor[0] = bgColor;
  170.     if (fontColor != "")      aDefICPColor[1] = fontColor;
  171.     if (mouseoverColor != "") aDefICPColor[2] = mouseoverColor;
  172. }
  173.  
  174. function setICPMenuColor(MenuIDStr, bgColor, fontColor, mouseoverColor)
  175. {    
  176.     if (ToolbarLoaded == false) return;
  177.  
  178.     // Reset previous ICP Menu color if any
  179.     if (CurICPMenu != "")
  180.     {
  181.         PrevID = CurICPMenu.substring(4);
  182.         CurICPMenu = "";
  183.         setICPMenuColor(PrevID, aDefICPColor[0], aDefICPColor[1], aDefICPColor[2]);
  184.     }
  185.  
  186.     var    id = "AM_" + "ICP_" + MenuIDStr;
  187.     var thisMenu = document.all(id);
  188.     if (thisMenu != null)
  189.     {
  190.         CurICPMenu = "ICP_" + MenuIDStr;
  191.         aCurICPColor[0] = bgColor;
  192.         aCurICPColor[1] = fontColor;
  193.         aCurICPColor[2] = mouseoverColor;
  194.  
  195.         // Change menu color
  196.         if (bgColor != "")
  197.             thisMenu.style.backgroundColor = bgColor;
  198.         if (fontColor != "")
  199.             thisMenu.children(0).style.color = fontColor;
  200.  
  201.         // Change subMenu color
  202.         id = "ICP_" + MenuIDStr;
  203.         thisMenu = document.all(id);
  204.         if (thisMenu != null)
  205.         {
  206.             if (bgColor != "")
  207.                 thisMenu.style.backgroundColor = bgColor;
  208.             
  209.             if (fontColor != "")
  210.             {
  211.                 i = 0;
  212.                 id = "AS_" + "ICP_" + MenuIDStr;
  213.                 thisMenu = document.all.item(id,i);
  214.                 while (thisMenu != null)
  215.                 {
  216.                     thisMenu.style.color = fontColor;
  217.                     i += 1;
  218.                     thisMenu = document.all.item(id,i);
  219.                 }
  220.             }
  221.         }
  222.     }
  223. }
  224.  
  225. function setAds(Gif,Url,AltStr)
  226. {    setBanner(Gif,Url,AltStr,"<!--BEG_ADS_BANNER-->","<!--END_ADS_BANNER-->");
  227. }
  228.  
  229. function setICPBanner(Gif,Url,AltStr)
  230. {    setBanner(Gif,Url,AltStr,"<!--BEG_ICP_BANNER-->","<!--END_ICP_BANNER-->");
  231. }
  232.  
  233. function setMSBanner(Gif,Url,AltStr)
  234. {    tempGif = "/library/toolbar/images/" + Gif;
  235.     setBanner(tempGif,Url,AltStr,"<!--BEG_MSC_BANNER-->","<!--END_MSC_BANNER-->");
  236. }
  237.  
  238. function setBanner(BanGif, BanUrl, BanAltStr, BanBegTag, BanEndTag)
  239. {
  240.     begPos = HTMLStr.indexOf(BanBegTag);
  241.     endPos = HTMLStr.indexOf(BanEndTag) + BanEndTag.length;
  242.     
  243.     SubStr = HTMLStr.substring(begPos, endPos);
  244.     SrcStr = "";
  245.     if (BanUrl != "")
  246.         SrcStr += "<A Target='_top' HREF='" + formatURL(BanUrl, BanGif) + "'>";
  247.     SrcStr += "<IMG SRC='" + BanGif + "' ALT='" + BanAltStr + "' BORDER=0>";
  248.     if (BanUrl != "")
  249.         SrcStr += "</A>";
  250.     SrcStr = BanBegTag + SrcStr + BanEndTag;
  251.     HTMLStr = HTMLStr.replace(SubStr, SrcStr);    
  252. }
  253.  
  254. function setICPSubMenuWidth(MenuIDStr, WidthType, WidthUnit)
  255. {    tempID = "ICP_" + MenuIDStr;
  256.     setSubMenuWidth(tempID, WidthType, WidthUnit);
  257. }
  258.  
  259. function setMSSubMenuWidth(MenuIDStr, WidthType, WidthUnit)
  260. {    tempID = "MS_" + MenuIDStr;
  261.     setSubMenuWidth(tempID, WidthType, WidthUnit);
  262. }
  263.  
  264. function setSubMenuWidth(MenuIDStr, WidthType, WidthUnit)
  265. {
  266.     var fFound = false;
  267.     if (TotalMenu == MaxMenu)
  268.     {
  269.         alert("Unable to process menu. Maximum of " + MaxMenu + " reached.");
  270.         return;
  271.     }
  272.     
  273.     for (i = 0; i < TotalMenu; i++)
  274.         if (arrMenuInfo[i].IDStr == MenuIDStr)
  275.         {
  276.             fFound = true;
  277.             break;
  278.         }
  279.  
  280.     if (!fFound)
  281.     {
  282.         arrMenuInfo[i] = new menuInfo(MenuIDStr);
  283.         TotalMenu += 1;
  284.     }
  285.  
  286.     if (!fFound && WidthType.toUpperCase().indexOf("DEFAULT") != -1)
  287.     {
  288.         arrMenuInfo[i].type = "A";
  289.         arrMenuInfo[i].unit = 160;
  290.     }
  291.     else
  292.     {
  293.         arrMenuInfo[i].type = (WidthType.toUpperCase().indexOf("ABSOLUTE") != -1)? "A" : "R";
  294.         arrMenuInfo[i].unit = WidthUnit;
  295.     }
  296. }
  297.  
  298. // This function creates a menuInfo object instance.
  299. function menuInfo(MenuIDStr)
  300. {
  301.     this.IDStr = MenuIDStr;
  302.     this.type  = "";
  303.     this.unit  = 0;
  304.     this.width = 0;
  305.     this.count = 0;
  306. }
  307.  
  308. function updateSubMenuWidth(MenuIDStr)
  309. {
  310.     for (i = 0; i < TotalMenu; i++)
  311.         if (arrMenuInfo[i].IDStr == MenuIDStr)
  312.         {
  313.             if (arrMenuInfo[i].width < MenuIDStr.length) 
  314.                 arrMenuInfo[i].width = MenuIDStr.length;
  315.             arrMenuInfo[i].count = arrMenuInfo[i].count + 1;
  316.             break;
  317.         }
  318. }
  319.  
  320. function addICPMenu(MenuIDStr, MenuDisplayStr, MenuHelpStr, MenuURLStr)
  321. {     
  322.     if (LastICPMenu == "") HTMLStr = HTMLStr.replace("<!--ICP_MENU_TITLES-->", TBLStr);
  323.  
  324.     if (addICPMenu.arguments.length > 4)
  325.         TargetStr = addICPMenu.arguments[4];
  326.     else
  327.         TargetStr = "_top";
  328.     tempID = "ICP_" + MenuIDStr;
  329.     addMenu(tempID, MenuDisplayStr, MenuHelpStr, MenuURLStr, TargetStr, true); 
  330.     LastICPMenu = tempID;
  331. }
  332.  
  333. function addMSMenu(MenuIDStr, MenuDisplayStr, MenuHelpStr, MenuURLStr)
  334. {    
  335.     TargetStr = "_top";
  336.     tempID = "MS_" + MenuIDStr;
  337.     addMenu(tempID, MenuDisplayStr, MenuHelpStr, MenuURLStr, TargetStr, false); 
  338.     LastMSMenu = tempID;
  339. }
  340.  
  341. function addMenu(MenuIDStr, MenuDisplayStr, MenuHelpStr, MenuURLStr, TargetStr, bICPMenu)
  342. {
  343.     cFont   = bICPMenu? ICPFont : MSFont;
  344.     cColor0 = bICPMenu? aDefICPColor[0] : aDefMSColor[0];
  345.     cColor1 = bICPMenu? aDefICPColor[1] : aDefMSColor[1];
  346.     cColor2 = bICPMenu? aDefICPColor[2] : aDefMSColor[2];
  347.     cStyle  = "font:" + cFont + ";background-color:" + cColor0 + ";color:" + cColor1 + ";";
  348.     tagStr  = bICPMenu? "<!--ICP_MENU_TITLES-->" : "<!--MS_MENU_TITLES-->";
  349.     
  350.     if (MenuHelpStr == "") MenuHelpStr = MenuDisplayStr;
  351.     MenuStr = newLineChar;
  352.     if (bICPMenu) 
  353.         MenuStr += "<TD STYLE='" + cStyle + "' ID='AM_" + MenuIDStr + "' NOWRAP>";
  354.     else
  355.     {
  356.         MenuStr += "<SPAN STYLE='" + cStyle + "'>";
  357.         if (LastMSMenu != "") MenuStr += "|"; 
  358.         MenuStr += " ";
  359.     }
  360.  
  361.     MenuStr += "<A STYLE='text-decoration:none;cursor:hand;font:" + cFont + ";color:" + cColor1 + ";'" +
  362.                "   TARGET='" + TargetStr + "'" +
  363.                "   TITLE=" + char34 + MenuHelpStr + char34;
  364.     if (MenuURLStr != "")
  365.         MenuStr += " HREF='" + formatURL(MenuURLStr, ((bICPMenu? "ICP_":"MS_") + MenuDisplayStr)) + "'";
  366.     else
  367.         MenuStr += " HREF='' onclick='window.event.returnValue=false;'";
  368.     MenuStr += " onmouseout="  + char34 + "mouseMenu('out' ,'" + MenuIDStr + "'); hideMenu();" + char34 + 
  369.                " onmouseover=" + char34 + "mouseMenu('over','" + MenuIDStr + "'); doMenu('"+ MenuIDStr + "');" + char34 + ">" +
  370.                " " + MenuDisplayStr + " </a>";
  371.     if (bICPMenu) 
  372.         MenuStr += " </TD><TD STYLE='" + cStyle + "'>|</TD>";
  373.     else
  374.         MenuStr += "</SPAN>";
  375.  
  376.     MenuStr += tagStr;
  377.     HTMLStr = HTMLStr.replace(tagStr, MenuStr);    
  378.     setSubMenuWidth(MenuIDStr,"default",0);
  379. }
  380.  
  381. function addICPSubMenu(MenuIDStr, SubMenuStr, SubMenuURLStr)
  382. {    
  383.     if (addICPSubMenu.arguments.length > 3)
  384.         TargetStr = addICPSubMenu.arguments[3];
  385.     else
  386.         TargetStr = "_top";
  387.     tempID = "ICP_" + MenuIDStr;
  388.     addSubMenu(tempID,SubMenuStr,SubMenuURLStr,TargetStr,true); 
  389. }
  390.  
  391. function addMSSubMenu(MenuIDStr, SubMenuStr, SubMenuURLStr)
  392. {    
  393.     TargetStr = "_top";
  394.     tempID = "MS_" + MenuIDStr;
  395.     addSubMenu(tempID,SubMenuStr,SubMenuURLStr,TargetStr,false); 
  396. }
  397.  
  398. function addSubMenu(MenuIDStr, SubMenuStr, SubMenuURLStr, TargetStr, bICPMenu)
  399. {
  400.     cFont   = bICPMenu? ICPFont : MSFont;
  401.     cColor0 = bICPMenu? aDefICPColor[0] : aDefMSColor[0];
  402.     cColor1 = bICPMenu? aDefICPColor[1] : aDefMSColor[1];
  403.     cColor2 = bICPMenu? aDefICPColor[2] : aDefMSColor[2];
  404.     
  405.     var MenuPos = MenuIDStr.toUpperCase().indexOf("MENU");
  406.     if (MenuPos == -1) { MenuPos = MenuIDStr.length; }
  407.     InstrumentStr = MenuIDStr.substring(0 , MenuPos) + "|" + SubMenuStr;;
  408.     URLStr        = formatURL(SubMenuURLStr, InstrumentStr);
  409.  
  410.     var LookUpTag  = "<!--" + MenuIDStr + "-->";
  411.     var sPos = HTMLStr.indexOf(LookUpTag);
  412.     if (sPos <= 0)
  413.     {
  414.         HTMLStr += newLineChar + newLineChar +
  415.                 "<SPAN ID='" + MenuIDStr + "'" +
  416.                 " STYLE='display:none;position:absolute;width:160;background-color:" + cColor0 + ";padding-top:0;padding-left:0;padding-bottom:20;z-index:9;'" +
  417.                 " onmouseout='hideMenu();'>";
  418.         if (Frame_Supported == false || bICPMenu == false)
  419.             HTMLStr += "<HR  STYLE='position:absolute;left:0;top:0;color:" + cColor1 + "' SIZE=1>";
  420.         HTMLStr += "<DIV STYLE='position:relative;left:0;top:8;'>";
  421.     }
  422.  
  423.     TempStr = newLineChar +
  424.                 "<A ID='AS_" + MenuIDStr + "'" +
  425.                 "   STYLE='text-decoration:none;cursor:hand;font:" + cFont + ";color:" + cColor1 + "'" +
  426.                 "   HREF='" + URLStr + "' TARGET='" + TargetStr + "'" +
  427.                 " onmouseout="  + char34 + "mouseMenu('out' ,'" + MenuIDStr + "');" + char34 + 
  428.                 " onmouseover=" + char34 + "mouseMenu('over','" + MenuIDStr + "');" + char34 + ">" +
  429.                 " " + SubMenuStr + "</A><BR>" + LookUpTag;
  430.     if (sPos <= 0)
  431.         HTMLStr += TempStr + "</DIV></SPAN>";
  432.     else
  433.         HTMLStr = HTMLStr.replace(LookUpTag, TempStr);    
  434.  
  435.     updateSubMenuWidth(MenuIDStr);    
  436. }
  437.  
  438. function addICPSubMenuLine(MenuIDStr)
  439. {    
  440.     tempID = "ICP_" + MenuIDStr;
  441.     addSubMenuLine(tempID,true);
  442. }
  443.  
  444. function addMSSubMenuLine(MenuIDStr)
  445. {    
  446.     tempID = "MS_" + MenuIDStr;
  447.     addSubMenuLine(tempID,false);
  448. }
  449.  
  450. function addSubMenuLine(MenuIDStr, bICPMenu)
  451. {
  452.     var LookUpTag = "<!--" + MenuIDStr + "-->";
  453.     var sPos = HTMLStr.indexOf(LookUpTag);
  454.     if (sPos > 0)
  455.     {
  456.         cColor  = bICPMenu? aDefICPColor[1] : aDefMSColor[1];
  457.         TempStr = newLineChar + "<HR STYLE='color:" + cColor + "' SIZE=1>" + LookUpTag;
  458.         HTMLStr = HTMLStr.replace(LookUpTag, TempStr);
  459.     }
  460. }
  461.  
  462. function mouseMenu(id, MenuIDStr) 
  463. {
  464.     IsMSMenu   = (MenuIDStr.toUpperCase().indexOf("MS_") != -1);
  465.     IsMouseout = (id.toUpperCase().indexOf("OUT") != -1);
  466.  
  467.     if (IsMouseout)
  468.     {
  469.         color = IsMSMenu? aDefMSColor[1] : aDefICPColor[1];
  470.         if (MenuIDStr == CurICPMenu && aCurICPColor[1] != "") 
  471.             color = aCurICPColor[1];
  472.     }
  473.     else
  474.     {
  475.         color = IsMSMenu? aDefMSColor[2] : aDefICPColor[2];
  476.         if (MenuIDStr == CurICPMenu && aCurICPColor[2] != "") 
  477.             color = aCurICPColor[2];
  478.     }
  479.     window.event.srcElement.style.color = color;
  480. }
  481.  
  482. function doMenu(MenuIDStr) 
  483. {
  484.     var thisMenu = document.all(MenuIDStr);
  485.     if (ToolbarMenu == null || thisMenu == null || thisMenu == ToolbarMenu) 
  486.     {
  487.         window.event.cancelBubble = true;
  488.         return false;
  489.     }
  490.     // Reset dropdown menu
  491.     window.event.cancelBubble = true;
  492.     ToolbarMenu.style.display = "none";
  493.     showElement("SELECT");
  494.     showElement("OBJECT");
  495.     showElement("IFRAME");
  496.     ToolbarMenu = thisMenu;
  497.     IsMSMenu = (MenuIDStr.toUpperCase().indexOf("MS_") != -1);
  498.  
  499.     // Set dropdown menu display position
  500.     x  = window.event.srcElement.offsetLeft +
  501.           window.event.srcElement.offsetParent.offsetLeft;
  502.     if (MenuIDStr == LastMSMenu) 
  503.         x += (window.event.srcElement.offsetWidth - thisMenu.style.posWidth);
  504.     y  = (IsMSMenu)? 
  505.          (idRow1.offsetHeight) :
  506.          (idRow1.offsetHeight + idRow2.offsetHeight + idRow3.offsetHeight);
  507.  
  508.     // Get main menu width
  509.     x2 = x + (MenuIDStr == LastMSMenu? thisMenu.style.posWidth : window.event.srcElement.offsetWidth);
  510.     // Get dropdown menu width
  511.     x3 = x + 160;
  512.     for (i = 0; i < TotalMenu; i++)
  513.         if (arrMenuInfo[i].IDStr == MenuIDStr)
  514.         {
  515.             x3 = x+ arrMenuInfo[i].unit;
  516.             break;
  517.         }
  518.     thisMenu.style.top  = y;
  519.     thisMenu.style.left = x;
  520.     thisMenu.style.clip = "rect(0 0 0 0)";
  521.     thisMenu.style.display = "block";
  522.  
  523.     // delay 2 millsecond to allow the value of ToolbarMenu.offsetHeight be set
  524.     window.setTimeout("showMenu()", 2);
  525.     return true;
  526. }
  527.  
  528. function showMenu() 
  529. {
  530.     if (ToolbarMenu != null) 
  531.     { 
  532.         IsMenuDropDown = (Frame_Supported && IsMSMenu == false)? false : true;
  533.         if (IsMenuDropDown == false)
  534.         {
  535.             y = (y - ToolbarMenu.offsetHeight - idRow3.offsetHeight);
  536.             if (y < 0) y = 0;
  537.             ToolbarMenu.style.top = y;
  538.         }
  539.         // Get dropdown menu height
  540.         y2 = y + ToolbarMenu.offsetHeight;
  541.  
  542.         ToolbarMenu.style.clip = "rect(auto auto auto auto)";
  543.         hideElement("SELECT");
  544.         hideElement("OBJECT");
  545.         hideElement("IFRAME");
  546.     }
  547. }
  548.  
  549. function hideMenu()
  550. {
  551.     if (ToolbarMenu != null && ToolbarMenu != StartMenu) 
  552.     {
  553.         var cX = event.clientX + document.body.scrollLeft;
  554.         var cY = event.clientY + document.body.scrollTop;
  555.         var bHideMenu = true;
  556.  
  557.         if (IsMenuDropDown == true)
  558.         {
  559.             if (cY >= (y - idRow3.offsetHeight+10) && cY < y)
  560.             {
  561.                 if (cX >= (x+5) && cX <= x2) bHideMenu = false;
  562.             }
  563.             else if (cY >= y && cY <= y2)
  564.             {
  565.                 if (cX > (x+5) && cX <= x3) bHideMenu = false;
  566.             }
  567.         }
  568.         else
  569.         {
  570.             if (cY >= y2 && cY < (y2 + idRow3.offsetHeight))
  571.             {
  572.                 if (cX >= (x+5) && cX <= x2) bHideMenu = false;
  573.             }
  574.             else if (cY >= y && cY <= y2)
  575.             {
  576.                 if (cX > (x+5) && cX <= x3) bHideMenu = false;
  577.             }
  578.         }
  579.  
  580.         if (! bHideMenu) 
  581.         {
  582.             window.event.cancelBubble = true;
  583.             return; 
  584.         }
  585.  
  586.         ToolbarMenu.style.display = "none";
  587.         ToolbarMenu = StartMenu;
  588.         window.event.cancelBubble = true;
  589.  
  590.         showElement("SELECT");
  591.         showElement("OBJECT");
  592.         showElement("IFRAME");
  593.     }
  594. }
  595.  
  596. function hideElement(elmID)
  597. {
  598.     for (i = 0; i < document.all.tags(elmID).length; i++)
  599.     {
  600.         obj = document.all.tags(elmID)[i];
  601.         if (! obj || ! obj.offsetParent)
  602.             continue;
  603.  
  604.         // Find the element's offsetTop and offsetLeft relative to the BODY tag.
  605.         objLeft   = obj.offsetLeft;
  606.         objTop    = obj.offsetTop;
  607.         objParent = obj.offsetParent;
  608.         while (objParent.tagName.toUpperCase() != "BODY")
  609.         {
  610.             objLeft  += objParent.offsetLeft;
  611.             objTop   += objParent.offsetTop;
  612.             objParent = objParent.offsetParent;
  613.         }
  614.         // Adjust the element's offsetTop relative to the dropdown menu
  615.         objTop = objTop - y;
  616.  
  617.         if (x > (objLeft + obj.offsetWidth) || objLeft > (x + ToolbarMenu.offsetWidth))
  618.             ;
  619.         else if (objTop > ToolbarMenu.offsetHeight)
  620.             ;
  621.         else if (IsMSMenu && (y + ToolbarMenu.offsetHeight) <= 80)
  622.             ;
  623.         else
  624.             obj.style.visibility = "hidden";
  625.     }
  626. }
  627.  
  628. function showElement(elmID)
  629. {
  630.     for (i = 0; i < document.all.tags(elmID).length; i++)
  631.     {
  632.         obj = document.all.tags(elmID)[i];
  633.         if (! obj || ! obj.offsetParent)
  634.             continue;
  635.         obj.style.visibility = "";
  636.     }
  637. }
  638.  
  639. function formatURL(URLStr, InstrumentStr)
  640. {
  641.     var tempStr = URLStr;
  642.  
  643.     if (DoInstrumentation && URLStr != "" )
  644.     {
  645.         var ParamPos1 = URLStr.indexOf("?");
  646.         var ParamPos2 = URLStr.lastIndexOf("?");
  647.         var ParamPos3 = URLStr.toLowerCase().indexOf("target=");
  648.         var ParamPos4 = URLStr.indexOf("#");
  649.         var Bookmark  = "";
  650.         var URL = URLStr;
  651.         if (ParamPos4 >= 0)
  652.         {
  653.              URL = URLStr.substr(0, ParamPos4);
  654.             Bookmark = URLStr.substr(ParamPos4);
  655.         }
  656.         
  657.         if (ParamPos1 == -1)
  658.             tempStr = "?MSCOMTB=";
  659.         else if (ParamPos1 == ParamPos2 && ParamPos3 == -1)    
  660.             tempStr = "&MSCOMTB=";
  661.         else if (ParamPos1 == ParamPos2 && ParamPos3 != -1)    
  662.             tempStr = "?MSCOMTB=";
  663.         else if (ParamPos1 < ParamPos2)
  664.             tempStr = "&MSCOMTB=";
  665.  
  666.         tempStr = URL + tempStr + InstrumentStr.replace(" ","%20") + Bookmark;
  667.     }
  668.     return tempStr;
  669. }
  670.